package qualomelhor.database;

import javax.persistence.Id;
import com.googlecode.objectify.annotation.Entity;
import java.io.Serializable;

@Entity
public class ParametrosSistema implements Serializable {

		public static final long serialVersionUID = 0;

		public static enum OrigemLogin {
			SITE(0, "site"),
			FACEBOOK(1, "facebook"),
			TWITTER(2, "twitter"),
			GOOGLE(3, "google"),
			YAHOO(4, "yahoo"),
			OUTRO(5, "outro");

			public static final long serialVersionUID = 0;

			public static OrigemLogin getOrigemLoginPerName(String siteName) {
				OrigemLogin result = OrigemLogin.OUTRO;
				for (int i = 0; i < OrigemLogin.values().length; i++) {
					if (OrigemLogin.values()[i].getSiteName().equals(siteName)) {
						result = OrigemLogin.values()[i];
						break;
					}
				}
				return result;
			}

			private OrigemLogin(int orig, String siteN) {
				siteOrigem = orig;
				siteName = siteN;
			}

			public int getSiteOrigem() {
				return siteOrigem;
			}

			public String getSiteName() {
				return siteName;
			}

			private Integer siteOrigem;
			private String siteName;
		};

		public static enum SiteHost {

			SITE_QUALQUER(0, "localhost", "", new String[]{""}, true),
			SITE_LOCALHOST(1, "localhost", "Minha própria pergunta (local)", new String[]{"pt_BR"}, true),
			SITE_COMPARA_TUDO(2, "www.compara-tudo.com", "Minha própria pergunta", new String[]{"pt_BR"}, true),
			SITE_EASY_COMPARE(3, "www.easy-compare.com", "Make my own question", new String[]{"en_US"}, true),
			SITE_QUAL_O_MELHOR(4, "www.qual-o-melhor.com", "Qual o melhor", new String[]{"pt_BR"}, false),
			SITE_QUAL_A_MELHOR(5, "www.qual-a-melhor.com", "Qual a melhor", new String[]{"pt_BR"}, false),
			SITE_O_QUE_E_MELHOR(6, "www.o-que-e-melhor.com", "O que é melhor", new String[]{"pt_BR"}, false),
			SITE_WHICH_IS_BETTER(7, "www.which-is-better.net", "Which is better", new String[]{"en_US"}, false),
			SITE_WHAT_IS_BEST(8, "www.what-is-best.com", "What is best", new String[]{"en_US"}, false);

			public static final long serialVersionUID = 0;
			
			public static SiteHost getSiteHostPerHost(String serverHost) {
				SiteHost result = null;
				for (int i = 0; i < SiteHost.values().length; i++) {
					if (!serverHost.equals("") && (SiteHost.values()[i].getHost().indexOf(serverHost) != -1 || serverHost.indexOf(SiteHost.values()[i].getHost()) != -1)) {
						result = SiteHost.values()[i];
						break;
					}
				}
				if (result == null) {
					result = SITE_QUALQUER;
				}
				System.out.println("Result = " + result.getHost());
				return result;
			}

			public static SiteHost getSiteHostPerId(int id) {
				SiteHost result = null;
				if (id == 99) return SITE_QUALQUER;
				for (int i = 0; i < SiteHost.values().length; i++) {
					if (SiteHost.values()[i].getIdSite() == id) {
						result = SiteHost.values()[i];
						break;
					}
				}
				return result;
			}

			
			private SiteHost(int id, String nomeHost, String perg, String[] local, boolean adm) {
				idSite = id;
				host = nomeHost;
				pergunta = perg;
				locale = local;
				admin = adm;
			}

			public int getIdSite() {
				return idSite;
			}

			public String getHost() {
				return host;
			}

			public String getPergunta() {
				return pergunta;
			}

			public String[] getLocale() {
				return locale;
			}

			public boolean getAdmin() {
				return admin;
			}

			public boolean containsLocale(String locale) {
				boolean result = false;
				for (int i = 0; i < getLocale().length; i++) {
					if (getLocale()[i].equals(locale)) {
						result = true;
						break;
					}
				}
				return result;
			}

			public boolean equals(SiteHost s) {
				return (this.getIdSite() == s.getIdSite());
			}

			private int idSite;
			private String host;
			private String pergunta;
			private String[] locale;
			private boolean admin;
		};

		public static enum Locale {
			PT(0, "pt"),
			EN(1, "en");

			private Locale(int id, String idiom) {
				idLocale = id;
				idioma = idiom;
			}

			public int getIdLocale() {
				return idLocale;
			}

			public String getIdioma() {
				return idioma;
			}

			private int idLocale;
			private String idioma;
		};
		
		@Id
	    private Long id; 

	    private boolean emManutencao;

	    public ParametrosSistema() {
	        this.emManutencao = false;
	    }

	    public Long getId() { 
	        return id; 
	    }

	    public boolean getEmManutencao() {
	    	return emManutencao;
	    }

	    public void setId(Long id) {
	    	this.id = id;
	    }

	    public void setEmManutencao(boolean emManutencao) {
	    	this.emManutencao = emManutencao;
	    }
}